5.3 循环语句
循环语句一般用于遍历数组、切片、MAP
等,同时也用于一些循环逻辑执行。
Go
语言的循环与其他语言差不多,只不过都是通过for
关键字来实现。
在前面关于数组、切片的学习中我们已经讲解过了for
循环的使用,本节我们将进行进一步的讲解。
本节代码存放目录为 lesson15
遍历
在Go
语言中,对于数组、切片、MAP
的遍历我们可以使用for循环实现。如下所示:
numbers := []int{1, 2, 3, 4, 5, 6, 7}
for i, v := range numbers {
fmt.Printf("index-> %d, value-> %d\n", i, v)
}
在上面的代码中,i
代表index
,也就是索引;v
代表value
,也就是索引所对应的value
值。
我们还可以将index
、value
省略,不进行取值。如下所示:
for i, _ := range numbers {
fmt.Printf("index-> %d\n", i)
}
for _, v := range numbers {
fmt.Printf("value-> %d\n", v)
}
除了使用上面的for range
方法,我们还可以使用for i...
方式。代码如下所示:
for i := 0; i < len(numbers); i++ {
fmt.Printf("index-> %d, value-> %d\n", i, numbers[i])
}
for i...
还可以这样使用:
for i := 0; i < 10; i++ {
fmt.Printf("第%d次循环\n", i+1)
}
上面的代码形式,我们一般用于一些需要循环多次处理的业务逻辑,这时候可以使用上面的方式来进行实现。
循环
上面我们讲到了for range
、for i...
的基本使用,除了上面的使用方法,我们在实际开发中,还会用来做一些循环及流程控制。
比如需要进行一个死循环,代码如下所示:
j := 1
for {
fmt.Printf("死循环第%d次\n", j)
time.Sleep(time.Duration(1) * time.Second)
j++
}
在上面的代码中,我们使用for {}
实现了一个死循环,并且每间隔1秒钟输出一次循环次数信息。
里面的代码会一直执行,如果我们要在执行到第10次的时候退出,那么我们可以使用break
。代码如下所示:
j := 1
for {
fmt.Printf("死循环第%d次\n", j)
time.Sleep(time.Duration(1) * time.Second)
j++
if j == 10 {
fmt.Println("死循环退出")
break
}
}
在上面的代码中,我们使用break
来退出了循环。
在Go
语言中,所有的循环都是可以通过break
来进行退出的。
同时Go
语言还具备另一个内容,就是goto
。这个关键字的作用是:跳转到指定地方开始执行。
例如我现在的需求是:执行到第10
次的时候重新从头执行。那么代码可以这样写:
loop:
x := 1
for {
fmt.Printf("死循环第%d次\n", x)
time.Sleep(time.Duration(1) * time.Second)
x++
if x == 10 {
fmt.Println("死循环从头开始执行")
goto loop
}
}
在上面的代码中,我们首先定义了一个loop
,定义为其他的也可以,比如loop1
、loop2
什么的。
loop
在这里是作为一个标识使用,标识从loop
往下的代码段。
在for
循环中,我们使用到了goto loop
,这句代码就表示程序跳转到loop
重新往下执行。
在for
循环中还有另一个概念,就是continue
,顾名思义,就是继续的意思。
在Go
语言中就表示跳过这次循环,继续执行下一次。代码如下所示:
for i := 0; i < 10; i++ {
if i+1 == 5 {
fmt.Printf("跳过第%d次循环\n", i+1)
continue
}
fmt.Printf("第%d次循环\n", i+1)
}
在上面的代码中,当i+1 == 5
的时候,我们使用了continue
关键字。
那么程序就不会再继续往下执行,也就是不会执行到fmt.Printf("第%d次循环\n", i+1)
。
这在我们实际项目中用于一些条件流程判断是比较有用的。
小结
Go
语言的循环比较简单,基本会用到的也就是它的基础知识。
关于本节的知识点总结如下:
可以使用
for range
格式进行循环遍历可以使用
for i...
格式进行循环遍历可以使用
for {}
进行循环控制可以使用
break
跳出循环可以使用
goto
关键字跳转到指定位置开始执行可以使用
continue
跳过此次循环,直接进入下一次循环